package cn.zlb.frame.domain.merchant.model.entity;

import cn.zlb.frame.common.utils.JacksonUtil;
import cn.zlb.frame.common.vo.BaseVO;
import cn.zlb.frame.domain.merchant.model.valueObj.AliPayAttachmentValueObj;
import cn.zlb.frame.domain.merchant.model.valueObj.PayAttachmentBaseValueObj;
import cn.zlb.frame.domain.merchant.model.valueObj.PayTypeValueObj;
import cn.zlb.frame.domain.merchant.model.valueObj.WechatPayAttachValueObj;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * @author yangjie.deng@resico.cn
 * @date 2023-11-14 14:38:09
 * @describe class responsibility
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class MerchantEntity<P extends PayAttachmentBaseValueObj> extends BaseVO {
    /**
     *  登录账户号
     */
    private String accountNo;

    /**
     *  保存到数据库后唯一商户编号
     */
    private String merchantNo;

    /**
     *  支付唯一应用ID
     */
    private String appId;

    /**
     *  企业名称
     */
    private String accountName;

    /***
     *  默认付款方式
     */
    private PayTypeValueObj defaultPayType;

    /**
     *  银行名称
     */
    private String debitBankName;

    /**
     *  银行账号
     */
    private String debitBankAccount;

    /**
     *  开户行
     */
    private String debitBankDeposit;

    /**
     *  企业邮箱
     */
    private String email;

    /**
     *  支付附加信息
     */
    private P payAttachmentInfo;


    /**
     *  支付附加信息转换
     *
     * @param json 转换对象
     * @return     转换结果
     */
    public P payAttachmentConvert(String json) {
        P valueObj = null;
        switch (this.defaultPayType) {
            case ALI_PAY:
                valueObj = (P) JacksonUtil.parseObject(json, AliPayAttachmentValueObj.class);
                break;
            case WECHAT_PAY:
                valueObj = (P) JacksonUtil.parseObject(json, WechatPayAttachValueObj.class);
                break;
            case YUN_FLASH_PAY:
                break;
            case BANK_CARD_PAY:
                break;
            default:
                break;
        }
        return valueObj;
    }
}
